package middlewares

import (
	"Cgo/global"
	"Cgo/utils"
	"net/http"

	"github.com/gin-gonic/gin"
)

// token鉴权中间件
func JWTAuth() gin.HandlerFunc {
	return func(ctx *gin.Context) {
		tokenString := ctx.GetHeader("token")
		if tokenString == "" {
			ctx.AbortWithStatusJSON(http.StatusOK, gin.H{
				"code": 0,
				"msg":  "token不能为空",
			})
			return
		}

		// 验证token
		tokenData, err := utils.ParseToken(tokenString)
		if err != nil {
			ctx.AbortWithStatusJSON(http.StatusOK, gin.H{
				"code": 0,
				"msg":  "token解析失败：" + err.Error(),
			})
			return
		}
		ctx.Set("tokenData", tokenData)
		//验证成功接着往下走
		ctx.Next()
		global.Logger.Info("token验证成功")
		return
	}
}

// 禁止特定ip访问
func ForbiddenIp() gin.HandlerFunc {
	return func(ctx *gin.Context) {
		clientIP := ctx.ClientIP()
		// 检查是否在禁止访问的 IP 列表中，这里简单地列出了一些示例 IP
		blockedIPs := []string{"179.43.190.218"}

		for _, ip := range blockedIPs {
			if clientIP == ip {
				// 如果客户端 IP 在被禁止的列表中，返回 403 禁止访问
				ctx.AbortWithStatus(http.StatusForbidden)
				return
			}
		}

		// 如果不在被禁止的 IP 列表中，继续处理请求
		ctx.Next()
	}
}
